package com.zhn;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

/**
 * 给你二叉树的根节点 root 和一个整数目标和 targetSum ，找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
 *
 * 叶子节点 是指没有子节点的节点。
 */
public class PathSum {
    List<Integer> path = new ArrayList<>();
    List<List<Integer>> res = new ArrayList<>();
    public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
        dfs(root,0,targetSum);
        return res;
    }

    public void dfs(TreeNode root,int num,int targetSum){
        if(root == null){
            return;
        }
        num+=root.val;
        path.add(root.val);
        if(num == targetSum && root.left == null&&root.right == null){
            res.add(new ArrayList<>(path));
        }
        dfs(root.left,num,targetSum);
        dfs(root.right,num,targetSum);
        //回溯
        path.remove(path.size() - 1);
    }
}

